#include "error.h"
#include "log.h"
#include "..\common\util.h"
#include "..\engine\engine.h"

CError::CError()
{	}

CError::CError(const char* errorDescription,const int line, const char* file, const int flags)
{
	string error("Error:"); 
	error.concat(errorDescription); 
	error.concat("\nDetails:\nLine:\t"); 
	error.concat(CUtil::toString(line)); 
	error.concat("\nFile:\t"); 
	error.concat(file); 
	error.concat("\n\n"); 
	
	if(flags & ERRORREPORT_LOG)
		CError::LogError(error); 
	if(flags & ERRORREPORT_NOTIFY)
		CError::NotifyError(error); 
}

CError::CError(const char* errorDescription, const int flags)
{
	string error("Error:"); 
	error.concat(errorDescription); 
	error.concat(" failed.\n"); 
	
	if(flags & ERRORREPORT_LOG)
		CError::LogError(error); 
	if(flags & ERRORREPORT_NOTIFY)
		CError::NotifyError(error); 
}

CError::CError(CErrorData& data, const int flags)
{
	string error("Error:"); 
	error.concat(data.mpMessage); 
	error.concat(" failed.\nDetails:\n  Line:\t"); 
	error.concat(CUtil::toString(data.mLine)); 
	error.concat("\t\t\n File:\t"); 
	error.concat(data.mpFile); 
	error.concat("\t\t"); 
	if(flags & ERRORREPORT_LOG)
		CError::LogError(error); 
	if(flags & ERRORREPORT_NOTIFY)
		CError::NotifyError(error); 
}

void CError::NotifyError(string &errorDescription)
{
	MessageBox(CEngine::GetInstance()->GetWindow()->GetHWnd(), errorDescription.c_str(), "Error", MB_OK | MB_ICONERROR); 
}

void CError::LogError(string &errorDescription)
{
	CLog::Write(errorDescription); 
}

void CError::Error(string &errorDescription)
{
	CError::LogError(errorDescription); 
	CError::NotifyError(errorDescription); 
}

void CError::NotifyError(const char* errorDescription)
{
	MessageBox(CEngine::GetInstance()->GetWindow()->GetHWnd(), "Error", errorDescription, MB_OK | MB_ICONERROR); 
}

void CError::LogError(const char* errorDescription)
{
	CLog::Write((char*)errorDescription); 
}

void CError::Error(const char* errorDescription)
{
	CError::LogError(errorDescription); 
	CError::NotifyError(errorDescription); 
}
